iT邦幫忙

2024 iThome 鐵人賽

DAY 5
0
自我挑戰組

硬體學習日記系列 第 5

Day-5 Verilog介紹-1 開檔及module

  • 分享至 

  • xImage
  •  

要來開始介紹verilog跟一些他的基本的功能語法啦~
Verilog是一種硬體描述語言(HDL),很廣泛的被用在EDA(電子設計自動化),用來描述數字系統的結構及行為、設計電路等,常用在IC、微處理器、數位邏輯設備。
那Verilog有很多的部分,這大概會有好幾篇~今天就先來介紹如何開一個寫Verilog的檔案及組成Verilog的最基本構造-module。

開檔寫verilog

先來介紹一下在哪寫verilog,一樣利用Quartus建立好一個project後,開檔!到左上方的File,選New,然後選「Verilog HDL File」。
https://ithelp.ithome.com.tw/upload/images/20240813/201683627oiejWVSBQ.png

創立好檔案後,跟畫圖的部分一樣(如果還沒看電路圖用diagram表示的那篇,可以去看一下),要先記得修改檔名,到File,選Saved as,存好後到時候執行才不會有錯誤。
原本剛建立好,檔名應該會是「Verilog1.v」之類的。
https://ithelp.ithome.com.tw/upload/images/20240813/20168362HecWovY7qr.png

修改好檔名後,上面的檔名應該會跟project name一樣。
https://ithelp.ithome.com.tw/upload/images/20240813/20168362eDnYvQlYXZ.png

接著就可以開始寫Verilog了~

module

首先要來介紹的是verilog的組成基本架構-module。

Verilog主要是由多個module組成,每一個module都描述了硬體特定部分。這些module是有階層的,其中會存在一個Top module。
Top module的名稱必須與project名稱一樣,否則執行時會出錯;Top module就像是C語言中的main,其他的module則是其他自定義的function。
每個module的大小都不同,可以用好幾個小的module組成一個大的module,例如Top module就可以由許多較小的module組成,這些較小的module可能又由幾個更小的module組成。
https://ithelp.ithome.com.tw/upload/images/20240813/201683625XyCTDCh9v.jpg

每一個module都有input、output及內部訊號。
module代表一個區塊的起始,結束這個區塊則是endmodule。
module基本結構大概是這樣:

module project_name(端口列表);
	//端口類型宣告
	//參數宣告
	//內部邏輯指令
	//模組功能使用、描述
endmodule

舉個小例子:

module newwork(A,B,F);
	input A; //輸入端
	input B; //輸入端
	output F; //輸出端
	
	assign F = A & B; //邏輯指令

endmodule //結束module

在input/output 後面接著的是使用到的變數名稱,這些名稱都要放在module之後的括號內,且結束後要記得加上「;」,接著就在底下宣告這些使用到的變數。

這裡跟C語言一樣,每個指令結束都要在最後面加上分號。但要注意,endmodule後面不用加上分號。

然後註解的部分,可以使用「//」或「/**/」來撰寫。

來稍微簡單提及一下module中的端口類型。

端口類型

  1. 輸入端口(input):module接收外部訊號的端口。
  2. 輸出端口(output):module輸出訊號到外部的端口。
  3. 雙向端口(inout):可以做為輸入或輸出的端口,通常為總線訊號。

有了端口,就可以與外界交流囉~

呼叫其他module

那如果要在一個module內呼叫另一個module,只要寫上欲呼叫module名稱及輸入參數就可以了!
就像是C語言呼叫function一樣。

舉個簡單的例子:

module first(A,B,F);
	input A;
	input B;
	output F;
	
	Comb( A, B, F );
	
	//其他內部指令
	
endmodule


module Comb(in1, in2, out);
	input in1;
	input in2;
	output out;
	
	assign out = in1 & in2;
	
endmodule

將主module的input及output訊號傳到Comb這個module,Comb將傳入的值做簡單的AND運算並將結果存在out中。

那今天就先到這邊~


上一篇
Day-4 在Quartus 畫邏輯圖
下一篇
Day-6 Verilog介紹-2 變數
系列文
硬體學習日記30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言